package com.reservation.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.reservation.entity.Guide;

import java.time.LocalDate;
import java.util.List;

/**
 * 解说员服务接口
 */
public interface GuideService {
    
    /**
     * 添加解说员
     *
     * @param guide 解说员信息
     * @return 添加成功的解说员信息
     */
    Guide addGuide(Guide guide);
    
    /**
     * 修改解说员信息
     *
     * @param guide 解说员信息
     * @return 修改后的解说员信息
     */
    Guide updateGuide(Guide guide);
    
    /**
     * 获取解说员详情
     *
     * @param id 解说员ID
     * @return 解说员信息
     */
    Guide getGuideById(Long id);
    
    /**
     * 删除解说员
     *
     * @param id 解说员ID
     * @return 是否成功
     */
    boolean deleteGuide(Long id);
    
    /**
     * 分页查询解说员列表
     *
     * @param page     分页参数
     * @param name     解说员姓名（可选）
     * @param language 解说语言（可选）
     * @param status   解说员状态（可选）
     * @return 解说员列表
     */
    IPage<Guide> getGuideList(Page<Guide> page, String name, String language, String status);
    
    /**
     * 获取所有解说员
     *
     * @return 解说员列表
     */
    List<Guide> getAllGuides();
    
    /**
     * 获取可用的解说员
     *
     * @return 解说员列表
     */
    List<Guide> getAvailableGuides();
    
    /**
     * 更新解说员状态
     * 
     * @param id 解说员ID
     * @param status 解说员状态
     * @return 更新后的解说员信息
     */
    Guide updateGuideStatus(Long id, String status);
    
    /**
     * 检查解说员在指定日期是否可预约
     * 
     * @param guideId 解说员ID
     * @param date 预约日期
     * @param timeSlot 时间段
     * @return 是否可预约
     */
    boolean checkGuideAvailable(Long guideId, LocalDate date, String timeSlot);

    boolean guideCancel(Long id);
}